以下以
TextView為例
我們一般init(初始化一個元件):
private var textView: TextView? = null
此方式在後續使用到textView的程式碼都要加上?才能使用
/
或是使用lateinit的話(參數延遲初始化):
private lateinit var textView: TextView
假設任何情況下,在後面程式碼沒有將textView成功初始化的話,
就會crash報錯:lateinit property tv has not been initialized
使用時機:宣告變數
第一次使用時才會執行內部程式碼,
且只有在會用到他時才會產生該值。
使用lazy,可以直接在內部宣告其初始狀態。
private val tv: TextView by lazy {
findViewById(R.id.textView)
}
class MainActivity : AppCompatActivity() {
private val tv: TextView by lazy {
findViewById(R.id.textView)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tv.text = "hello world"
}
}
lazy只會在第一次使用時會被呼叫執行,
所以假設註解了
// tv.text = "hello world"
則tv這個值就不會被產生
比起
init、lateinit,lazy更為方便且安全,
也能更有效地節省空間。
目前宣告各式各樣的變數,基本上都用lazy,
覺得很方便所以分享一下。
第一次寫文章,各方面都有些彆扭,不好意思了。
參考資源: